class Contabilita::PolizzeController < DefaultController
  require_role self.parent_name.underscore
  #record_select :search_on => [:numero, :descrizione], :order_by => :numero, :full_text_search => true 
  
  active_scaffold :polizza do |config|
    config.label = Application.controller_label(self) + " / Fideiussioni"
    list.sorting = [:scadenza_premio => 'ASC']
    config.actions.add :field_search, :config_list, :export

    # definizione colonne
    columns = [:tipo_polizza, :numero, :riferimento, :assicurazione, :agenzia, :descrizione, :condizioni, :classe,
      :data_stipula, :scadenza_premio, :frazionamento, :stato]
    columns_form = [:tipo_polizza, :numero, :riferimento_id, :descrizione, :assicurazione, :agenzia, :condizioni, :classe, :data_stipula, :stato, :premi_assicurativi]
    columns_list = [:tipo_polizza, :numero, :riferimento, :descrizione, :assicurazione, :data_stipula, :scadenza_premio, :stato]

    # visualizzazione colonne
    config.columns = config.show.columns = config.list.columns = columns
    config.update.columns = config.create.columns = columns_form
    config.field_search.columns = columns
    config.config_list.default_columns = columns_list

    # configurazione colonne
    config.columns[:stato].options = {:options => Polizza::STATO.map(&:to_sym), :include_blank => as_(:_select_)}
    [:assicurazione, :agenzia].each { |i|
      config.columns[i].form_ui = :record_select
    }
    [:tipo_polizza, :stato].each { |i|
      config.columns[i].form_ui = :select
    }
    [:assicurazione, :agenzia].each { |i|
      config.columns[i].options[:size] = 50
      config.columns[i].options[:params] = {:filter => 'assicurazioni'}
    }
    config.columns[:tipo_polizza].search_ui = :multi_select
    config.columns[:descrizione].options[:size] = 80
    config.columns[:data_stipula].form_ui = :calendar_date_select
    config.columns[:data_stipula].options = {:year_range => [6.years.ago, 0.years.from_now]}
    [:descrizione, :condizioni, :stato].each { |i| config.columns[i].inplace_edit = :ajax }
    config.columns[:condizioni].options = NOTE_TEXTAREA
    config.columns[:tipo_polizza].update_column = :riferimento_id
    
    # azioni
    config.columns[:numero].set_link('nested', :parameters => {:associations => :premi_assicurativi})
    config.columns[:assicurazione].set_link('show', :controller => 'anagrafiche/partners')
    config.columns[:agenzia].set_link('show', :controller => 'anagrafiche/partners')
    config.action_links.add "Note", :action => 'nested', :parameters => {:associations => :note}, :type => :member
    config.action_links.add "Allegati", :action => 'nested', :parameters => {:associations => :allegati}, :type => :member
    
    #ricerca
    config.columns[:assicurazione].search_sql = 'partners.ragione_sociale'
    config.columns[:agenzia].search_sql = 'partners.ragione_sociale'
    config.columns[:note].search_sql = 'note.testo'
  end

  def all
    params[:filter] = 'all'
    active_scaffold_config.label = Application.controller_label(self) + " (tutte)"
    index
  end

  def attivi
    params[:filter] = 'attivi'
    active_scaffold_config.label = Application.controller_label(self) + " (attive)"
    index
  end

  def set_conditions
    case params[:filter]
    when 'all'
      []
    when 'attivi'
      ["(stato = 'attiva')"]
    else
      []
    end
  end
  
  def conditions_for_collection
    set_conditions
  end

  def record_select_conditions_from_controller
    set_conditions
  end 

  
  def controller_before_create_update_save(record)
    record.riferimento_type = record.tipo_polizza.riferimento_type unless record.tipo_polizza.nil?
  end

  def aggiorna_polizza(record)
    record.update_attributes(:frazionamento => record.premi_assicurativi.first(:order => 'data_fine DESC').frazionamento) unless record.premi_assicurativi == []
    record.update_attributes(:scadenza_premio => record.premi_assicurativi.first(:order => 'data_fine DESC').data_fine) unless record.premi_assicurativi == []
  end

  def after_create_save(record)
    aggiorna_polizza(record)
  end
  def after_update_save(record)
    aggiorna_polizza(record)
  end
end
